home *** CD-ROM | disk | FTP | other *** search
/ Inside Mac Games Volume 4 #9 / IMG 40 Sep 1996.iso / More Goodies / More for Your Game / Doom II / DFLE Users Folder / Goal & Inf demos / DFGOALS.TXT next >
Text File  |  1995-10-12  |  20KB  |  585 lines

  1.                 ------------------------------------------------     
  2.                 |    HOW TO CREATE DARK FORCES MISSION GOALS   |
  3.                 | by Jereth Kok (kokj4m@stmichaels.vic.edu.au) |
  4.                 ------------------------------------------------
  5.  
  6.  
  7. Acknowledgements:
  8. -----------------
  9.  
  10. LucasArts Entertainment Company --      creators of Dark Forces
  11. Yves Borckmans                  --      creator of DFUSE
  12. Ben & Pat McBride               --      makers of the DFUSE tutorials 
  13. Anyone else who I haven't mentioned and believe that they have made 
  14. a significant contribution to the world of Dark Forces editing!
  15.  
  16.  
  17. G'day, fellow Dark Forces editors!
  18.  
  19. This file (DFGOALS.TXT) contains a full explanation on how to create mission
  20. goals in Dark Forces. The demo (GOALS.EXE) gives a demonstration on how to
  21. create simple object and trigger goals as well as tracking devices, sequence
  22. charges and the ALL NEW BOSS GOALS!!! Remember to put the SECBASE.* files
  23. in your DARK directory. Take a look at SECBASE.INF and SECBASE.GOL which
  24. are relevant for making mission goals.
  25.  
  26. I assume that anyone reading this file or using the demo already has managed
  27. to obtain Yves Borckman's DFUSE program. You will need LEVMAP, a .LEV and .O
  28. file editor which is a part of DFUSE.
  29.  
  30.  
  31.  
  32. CONTENTS
  33. --------
  34. 1. Goal overview
  35. 2. The GOL file
  36. 3. Object goals
  37. 4. Trigger goals
  38. 5. Multiple goals
  39. 6. Tracking device and sequence charges
  40. 7. Boss goals
  41.  
  42.  
  43. 1. GOAL OVERVIEW
  44. ----------------
  45. A mission goal is quite self explanatory. Each Dark Forces level has mission
  46. goals, or objectives, that must be completed. Once all of the objectives in a
  47. level, are complete you will be allowed to press ESC and move on to the next
  48. level.
  49.  
  50. Okay, here's the suprise. I'll bet that most people reading this believes
  51. that mission completion is controlled by the .GOL file. Incorrect! Mission
  52. completion is controlled in the .INF file! So you'd have better read my .INF
  53. file explanation (INFFILE.TXT) if you want to fully understand how to make 
  54. mission goals!
  55.  
  56. What the GOL file does, is control the objective screen of your Personal Data
  57. Assistant (PDA), accessed by pressing F1 while in the game. A 
  58.  
  59. "message: [stop] [sector name] complete [num]"
  60.  
  61. that is sent from a trigger goal to a goal completion elevator (usually a
  62. dummy sector - inaccessible to the player) will fire the goal in the GOL file
  63. that is specified by the "[num]". This will cause your PDA to show that the
  64. goal has been completed. Goal objects will cause this to happen through their
  65. logics. So all that the GOL file does is displays when goals have been done, 
  66. NOT allow mission completion.
  67.  
  68. Unfortunately, however, the PDA is contained in a LFD (cutscene) file, the
  69. format of which is as yet unknown. So therefore, home made levels which have
  70. totally new mission objectives will not alter the PDA. The PDA will still show
  71. the goals of the original level that is being replaced. So therefore, until
  72. the LFD files become understood, which is very unlikely, I think that editing
  73. the GOL file is not essential to a home made level.
  74.  
  75.  
  76. The .INF file, on the other hand, is what will allow you to continue on to
  77. the next mission once you have completed all of the mission goals. Also,
  78. assuming that you haven't edited the TEXT.MSG file, the .INF file will
  79. also cause the messages -
  80.  
  81. "Mission Objectives Complete"
  82. "Press <ESC> Key to End Mission"
  83.  
  84.                                 - to be displayed when you have completed
  85. all of the mission goals.
  86.  
  87.  
  88. 2. THE GOL FILE
  89. ---------------
  90. I'll include this explanation of the GOL file in the unlikely event that 
  91. the LFD files will become understood and editable.
  92.  
  93. This is what will be seen for an object goal:
  94.  
  95. GOAL: #         ITEM: [num]
  96.  
  97.  
  98. And an explanation of this:
  99.  
  100. GOAL: #         --      This is the number of the goal starting from 0 
  101.                         and ascending in whole numbers. It corresponds
  102.                         with the objective display in the PDA.
  103.  
  104. ITEM: [num]     --      This corresponds with a goal object. Here are the
  105.                         possible goal objects and their num:
  106.  
  107.                         Object -                Num -                        
  108.  
  109.                         IDPLANS.WAX             0
  110.                         IPHRIK.FME              1
  111.                         INAVA.WAX               2
  112.                         IDATA.FME               4
  113.                         IDTGUN.FME              5
  114.                         IPILE.FME               6
  115.  
  116. As mentioned before, the logics of the above goal objects will fire the
  117. appropriate ITEM: [num] to show in the PDA that the goal object has been
  118. taken.
  119.  
  120.  
  121.  
  122. This is what will be seen for a trigger goal:
  123.  
  124. GOAL: #         TRIG: [num]
  125.  
  126.  
  127. And an explanation of this:
  128.  
  129. GOAL: #         --      Same as for object goals.
  130.  
  131. TRIG: [num]     --      This corresponds with a trigger goal. The trigger
  132.                         should have a
  133.                         
  134.                         "message: [completion elevator] complete [num]".
  135.                         
  136.                         This message will fire the TRIG: [num] to show in the
  137.                         PDA that the goal trigger has been triggered.
  138.  
  139.  
  140.  
  141. 3. OBJECT GOALS
  142. ---------------
  143. Goal objects are objects that can be used as mission objectives.
  144.  
  145. These are the possible objects that can be used as goals:
  146.  
  147. IDPLANS.WAX     (Death Star Plans)
  148. IPHRIK.FME      (Phrik metal)
  149. INAVA.WAX       (Nava Card)
  150. IDTGUN.FME      (Broken Dark Trooper weapon)
  151. IDATA.FME       (Data tapes)
  152. IPILE.FME       (Your gear)
  153.  
  154.  
  155. This is how to make obtaining one of these objects into a mission goal:
  156.  
  157. Enter Levmap. Add one of these objects to a sector in your level (select
  158. an existing object, move to the desired position and press Insert). Then
  159. edit the object (Enter) and change it to one of the above frames or sprites.
  160. The next step is VERY important - press S to change the logic of the copied 
  161. object to the logic of the new object. This is important because, as mentioned
  162. above, the logics of these goal objects will fire the ITEM: [num] in the GOL
  163. file. But in addition, the logics of these objects will also cause an elevator
  164. called "complete" to move to its next stop. Therefore, by giving this elevator
  165. "stop: [value] complete" at stop 1, mission completion will occur when the
  166. object has been picked up.
  167.  
  168. Now you need the completion elevator. Create a dummy sector (inaccessible to
  169. the player) in Levmap. It HAS to be called "complete". Now edit the INF file
  170. of the level, add one to "ITEMS #" and add this item:
  171.  
  172. item: sector    name: complete
  173.         seq
  174.                 class: elevator move_floor
  175.                 event_mask: 0
  176.                 speed: 0
  177.                 stop: 0 hold
  178.                 stop: 1 complete
  179.         seqend
  180.  
  181.  
  182.  
  183.  
  184. 4. TRIGGER GOALS
  185. ----------------
  186. To make a trigger goal, you will need the following in the trigger's sequence
  187. (in the INF file, of course).
  188.  
  189. message: [completion elevator name] complete [num]
  190.  
  191. Now create a completion elevator exactly the same as with goal objects, only
  192. this time it does not need to called "complete". 
  193.  
  194. item: sector    name: [completion elevator name]
  195.         seq
  196.                 class: elevator move_floor
  197.                 event_mask: 0
  198.                 speed: 0
  199.                 stop: 0 hold
  200.                 stop: 1 complete
  201.         seqend
  202.  
  203.  
  204. The "complete [num]" message sent from the trigger will move this elevator
  205. to its next stop, but will also fire the TRIG: [num] in the GOL file to
  206. show in the PDA that the trigger goal has been triggered. Once again, this
  207. is useless since LFD files can't be edited.
  208.  
  209.  
  210.  
  211. 5. MULTIPLE GOALS
  212. -----------------
  213. A level would be pretty boring with only one mission goal! Multiple goals
  214. require the use of a dummy elevator for each goal and another dummy elevator
  215. which is the completion elevator and is activated by each of the other dummy
  216. elevators.
  217.  
  218.  
  219. 5a. Multiple goals in any order
  220. -------------------------------
  221. To create a level with more than one goal that can be done in any order, 
  222. you need a dummy elevator for each trigger goal and one for all goal objects.
  223. The trigger's clients should be their dummy elevator.
  224.  
  225. The dummy elevator for goal objects needs to be called "complete", of course.
  226. Just make sure that "complete" will only reach its final stop when all the
  227. goal objects have been picked up. This means that "complete" needs to have 1
  228. more stop than there are goal objects. All stops should be "hold". At the
  229. final stop a message is sent to a completion elevator telling it to move to
  230. its next stop.
  231.  
  232. The dummy elevators for trigger goals should have 3 stops each. They should
  233. hold at stop 0, stay at stop 1 for a short period of time and terminate at
  234. stop 2. They have to send a "complete" message from stop 1 to the completion
  235. elevator.
  236.  
  237. The completion elevator needs to have its initial stop (stop 0) plus a
  238. stop for each of the other dummy elevators. Its final stop should be a
  239. "complete" stop.
  240.  
  241.  
  242. Here's an example of the mission completion elevators in the INF file where
  243. there are 2 goal objects and 2 trigger goals. All can be done in any order.
  244.  
  245.  
  246. /* This is the dummy elevator for the object goals */
  247. item: sector    name: complete
  248.         seq
  249.                 class: elevator move_floor
  250.                 event_mask: 0
  251.                 stop: 0 hold
  252.                 stop: 1 hold
  253.                 stop: 2 hold
  254.                 message: 2 all_complete next_stop
  255.                 speed: 0
  256.         seqend
  257.  
  258. /* This is the client dummy elevator of one of the trigger goals */
  259. item: sector    name: dummy1
  260.         seq
  261.                 class: elevator move_floor
  262.                 event_mask: 0
  263.                 stop: 0 hold
  264.                 stop: 1 0
  265.                 message: 1 all_complete complete [num]
  266.                 stop: 2 terminate
  267.                 speed: 0
  268.         seqend
  269.  
  270. /* This is the client dummy elevator of the other trigger goal. */
  271. item: sector    name: dummy2
  272.         seq
  273.                 class: elevator move_floor
  274.                 event_mask: 0
  275.                 stop: 0 hold
  276.                 stop: 1 0
  277.                 message: 1 all_complete complete [num]
  278.                 stop: 2 terminate
  279.                 speed: 0
  280.         seqend
  281.  
  282.  
  283. /* This is the completion elevator */
  284. item: sector    name: all_complete
  285.         seq
  286.                 class: elevator move_floor
  287.                 event_mask: 0
  288.                 stop: 0 hold
  289.                 stop: 1 hold
  290.                 stop: 2 hold
  291.                 stop: 3 complete
  292.                 speed: 0
  293.         seqend
  294.  
  295.  
  296.  
  297. 5b. Sequential goals
  298. --------------------
  299. It gets more complicated if you want goals that can only be done in a
  300. particular order. For example, you might need to get the Death Star Plans 
  301. before reaching your landing pad. What this involves is the use of the
  302. master variable. Completing one goal would turn on the master of an elevator
  303. which would enable another goal to be completed and so on.
  304.  
  305. Here is the above example again, but this time the goals have to be completed
  306. in this order - object, object, trigger, trigger.
  307.  
  308.  
  309. /* This is the dummy elevator for the object goals */
  310. item: sector    name: complete
  311.         seq
  312.                 class: elevator move_floor
  313.                 event_mask: 0
  314.                 stop: 0 hold
  315.                 stop: 1 hold
  316.                 stop: 2 hold
  317.                 message: 2 all_complete next_stop
  318.                 message: 2 dummy1 master_on
  319.                 speed: 0
  320.         seqend
  321.  
  322. /* This is the client dummy elevator of the first trigger goal. Its master*/
  323. /* is initially off, but is turned on when both objects have been picked up.*/
  324. item: sector    name: dummy1
  325.         seq
  326.                 class: elevator move_floor
  327.                 master: off
  328.                 event_mask: 0
  329.                 stop: 0 hold
  330.                 stop: 1 0
  331.                 message: 1 all_complete complete [num]
  332.                 message: 1 dummy2 master_on
  333.                 stop: 2 terminate
  334.                 speed: 0
  335.         seqend
  336.  
  337. /* This is the client dummy elevator of the second trigger goal. Its master*/
  338. /* is initially off, but is turned on when the first trigger goal has been*/
  339. /* triggered. */
  340. item: sector    name: dummy2
  341.         seq
  342.                 class: elevator move_floor
  343.                 master: off
  344.                 event_mask: 0
  345.                 stop: 0 hold
  346.                 stop: 1 0
  347.                 message: 1 all_complete complete [num]
  348.                 stop: 2 terminate
  349.                 speed: 0
  350.         seqend
  351.  
  352. /* This is the completion elevator. */
  353. item: sector    name: all_complete
  354.         seq
  355.                 class: elevator move_floor
  356.                 event_mask: 0
  357.                 stop: 0 hold
  358.                 stop: 1 hold
  359.                 stop: 2 hold
  360.                 stop: 3 complete
  361.                 speed: 0
  362.         seqend
  363.  
  364.  
  365.  
  366.  
  367. 6. TRACKING DEVICE AND SEQUENCER CHARGES
  368. ----------------------------------------
  369. These are two special cases of trigger goals. Here's how to make them...
  370.  
  371.  
  372. 6a. Tracking device
  373. -------------------
  374. This is found in Ramses Hed (original level 7). This is what happens: the 
  375. line with the tracking device texture is in a small alcove sector. This
  376. sector is an elevator scroll_wall, and also a trigger. The trigger is
  377. operated by nudging from the outside, and causes a dummy elevator to move to
  378. its next stop. At its next stop, the dummy elevator moves the sector with the
  379. tracking device texture (elevator scroll_wall) to its next stop at speed: 0
  380. (instantaneous). At this stop, the dummy sector also moves another dummy
  381. elevator to a complete stop. The wall with the tracking device texture has
  382. flag 1 bit 128 (allow scroll mid tx), so it will scroll instantaneously to a
  383. point which looks the same as it was before, but with the little blue thing
  384. on it so it looks as if Kyle has placed a tracking device on it.
  385.  
  386.  
  387. Here's how to create this same effect in your level:
  388.  
  389. Firstly, in Levmap, create a small rectangular sector with height 8. Two
  390. sides should have a width of 8 and the other two sides should have a very
  391. small width (1 or 2). Adjoin this to the desired sector so it is an alcove
  392. at Kyle's eye level. Call this sector "track_dev". Place texture IATRKDEV.BM
  393. on the wall opposite the wall with the adjoin. Give this wall flag 1 bit 128
  394. (allow scroll mid tx). Add 2 dummy sectors and call them "dummy" and
  395. "complete". Now add the following to the INF file of the level (add 3 to
  396. "items #").
  397.  
  398.  
  399. item: sector    name: track_dev
  400.         seq
  401.                 class: trigger
  402.                 event_mask: 32
  403.                 client: dummy
  404.                 message: complete [num]  
  405.  
  406.                 class: elevator scroll_wall
  407.                 event_mask: 0
  408.                 speed: 0
  409.                 angle: 180
  410.                 stop: 0 hold
  411.                 stop: 64 terminate
  412.         seqend
  413.  
  414. item: sector    name: dummy
  415.         seq
  416.                 class: elevator move_floor
  417.                 event_mask: 0
  418.                 stop: 0 hold
  419.                 stop: 1 0
  420.                 message: 1 track_dev next_stop
  421.                 message: 1 complete next_stop
  422.                 stop: 2 terminate
  423.                 speed: 0
  424.         seqend
  425.  
  426. item: sector    name: complete
  427.         seq
  428.                 class: elevator move_floor
  429.                 event_mask: 0
  430.                 stop: 0 hold
  431.                 stop: 1 complete
  432.                 speed: 0
  433.         seqend
  434.  
  435.  
  436.  
  437. 6b. Sequencer charges
  438. ---------------------
  439. These are found in the Gromas Mines, Robotics Facility and Arc Hammer (levels
  440. 5, 8 and 14). The concept is the same as the tracking device. Note that the
  441. elevator scroll_wall has 3 stops in this case. Once you nudge the alcove 
  442. sector, the sequencer charge texture scrolls between 2 stops.
  443.  
  444.  
  445. Here's what to do: 
  446.  
  447. Firstly, in Levmap, create a small rectangular sector with height 8. Two
  448. sides should have a width of 8 and the other two sides should have a very
  449. small width (1 or 2). Adjoin this to the desired sector so it is an alcove
  450. at Kyle's eye level. Call this sector "seq_charge". Place texture IWASEQUE.BM
  451. on the wall opposite the wall with the adjoin. Give this wall flag 1 bit 128
  452. (allow scroll mid tx). Add a dummy sector and call it "dummy". Add another
  453. dummy sector and call it "charge_set". Add one more dummy sector and 
  454. call it "complete". Now add the following to the INF file of the level
  455. (add 4 to "items #").
  456.  
  457.  
  458. item: sector    name: seq_charge
  459.         seq
  460.                 class: trigger
  461.                 event_mask: 32
  462.                 client: dummy
  463.                 message: complete [num]  
  464.  
  465.                 class: elevator scroll_wall
  466.                 event_mask: 0
  467.                 speed: 0
  468.                 angle: 0
  469.                 stop: 192 hold
  470.                 stop: 128 hold
  471.                 stop: 64 hold
  472.         seqend
  473.  
  474. item: sector    name: dummy
  475.         seq
  476.                 class: elevator move_floor
  477.                 event_mask: 0
  478.                 speed: 0
  479.                 stop: 0 hold
  480.                 stop: 1 0
  481.                 message: 1 charge_set master_on
  482.                 message: 1 complete next_stop
  483.                 stop: 2 terminate
  484.         seqend
  485.  
  486. item: sector    name: charge_set
  487.         seq
  488.                 class: elevator move_floor
  489.                 event_mask: 0
  490.                 master: off
  491.                 speed: 0
  492.                 stop: 0 0.5
  493.                 message: 0 seq_charge goto_stop 1
  494.                 stop: 1 0.5
  495.                 message: 1 seq_charge goto_stop 2
  496.         seqend
  497.  
  498. item: sector    name: complete
  499.         seq
  500.                 class: elevator move_floor
  501.                 event_mask: 0
  502.                 stop: 0 hold
  503.                 stop: 1 complete
  504.                 speed: 0
  505.         seqend
  506.  
  507.  
  508.  
  509. 7. BOSS GOALS
  510. -------------
  511. This is actually a little invention of mine (Sorry if someone else has come up
  512. with this idea too!) - it's not used in any of the original levels. A boss
  513. goal is an objective completed by killing an enemy. This could be very handy
  514. in a "Terminate Boba Fett" or "Terminate General Mohc" level!
  515.  
  516.  
  517. The following can be used as boss goals:
  518.  
  519. BOBAFETT.WAX            (What do you think?!?)
  520. KELL.WAX                (Kell dragon)
  521. PHASE1.WAX              (Phase 1 Dark Trooper)
  522. PHASE2.WAX              (Phase 2 Dark Trooper)
  523. PHASE3X.WAX             (Mohc)
  524.  
  525.  
  526. The principle behind this is similar to goal objects like the Death Star
  527. Plans. A certain element in the sequence of one of these objects will cause
  528. an elevator called "boss", (or "mohc" in the case of PHASE3X.WAX) to move
  529. to its next stop.
  530.  
  531.  
  532. This is what you need to do to turn one of these sprites into a mission 
  533. objective:
  534.  
  535. Edit the .O file of the level and find the sprite that you want to kill
  536. in order to complete the mission. Add this to its sequence (the stuff between
  537. "Seq" and "Seqend"):
  538.  
  539. BOSS:   TRUE
  540.  
  541. Now edit your level with Levmap. Add a dummy sector called "boss" if your 
  542. boss goal is Boba Fett, a Kell dragon, a Phase 1 Dark Trooper or a Phase 2
  543. Dark Trooper. If the boss goal is Mohc, call the dummy sector "mohc". Add
  544. another dummy sector and call it "complete".
  545.  
  546. Add this to the INF file of the level (add 2 to "items #"):
  547.  
  548. item: sector    name: boss/mohc
  549.         seq
  550.                 class: elevator move_floor
  551.                 event_mask: 0
  552.                 stop: 0 hold
  553.                 stop: 1 hold
  554.                 message: 1 complete complete [num]
  555.                 speed: 0
  556.         seqend
  557.  
  558. item: sector    name: complete
  559.         seq
  560.                 class: elevator move_floor
  561.                 event_mask: 0
  562.                 stop: 0 hold
  563.                 stop: 1 complete
  564.                 speed: 0
  565.         seqend
  566.  
  567.  
  568.  
  569.  
  570.  
  571. Well, that's all folks! If you have anything to add to this file, if you want
  572. to correct something I have wrong, or if you just want to comment or ask a
  573. question, mail me at
  574.  
  575. kokj4m@stmichaels.vic.edu.au
  576.  
  577. Any additions, or corrections will be put in an updated version of this file.
  578. Include your name so that I can credit you.
  579.  
  580. Please distribute this file like crazy! Upload it on bulletin boards and 
  581. Internet pages! 
  582.  
  583.  
  584. Until next time, Happy Dark Forces level making!
  585.